;*************************************************************************
;Programa kuri atima labai ilgus desimtainius skaicius (iki 255 simboliu)*
;*************************************************************************
.model small
.stack 100h
.data
msg1 db 'Iveskite pirma skaiciu $'
msg2 db 10,13, 'Iveskite antra skaiciu $'
msg3 db 10,13, 'Ivyko klaida $'
msg4 db 10,13, 'Atsakymas $'
sk1 db 255 dup ('$')
sk2 db 255 dup ('$')

.code
main:
      mov ax, @data
      mov ds, ax
      mov dx,offset msg1
      mov ah, 09h
      int 21h
      mov si, 0
      mov di, 0
skaicius1:
      mov cx, si        ;cx issaugosim pirmo skaiciaus ilgi
      mov ah, 01h
      int 21h
      cmp al, 13        ; ENTER?
      je toliau
      mov sk1[si], al
      inc si
      cmp si, 256       ; paziurim ar nevirsijom 255 simboliu
      je klaida         ; jei taip persokam i klaida
      jmp skaicius1
toliau:
      mov dx,offset msg2
      mov ah, 09h
      int 21h
skaicius2:                 
      mov bx,di         ; bx issaugosim antro skaiciaus ilgi
      mov ah, 01h
      int 21h
      cmp al, 13        ; ENTER?
      je ilgis
      mov sk2[di], al
      inc di
      cmp di, 256
      je klaida
      jmp skaicius2
ilgis:                  ; jei antras skaicius ilgesnis uz pirma
      cmp si, di        ; 
      jb klaida         ;
      xchg cx, bx       ; apsikeiciam reiksmemis bx bus saugoma sk1 ilgis
      clc               ; cf=0
atimtis:
      dec si
      dec di
      mov al, sk1[si]
      sbb al, sk2[di] 
      aas
      mov sk1[si], al
      loop atimtis      ; cx=cx-1, kol cx <> 0 tol persoks i atimti
            
      jb klaida          ; jei cf=1, ty reik dar atimti 1
      xchg bx, cx       ; i cx grazinam pirmo skaiciaus ilgi, bx=0
      lea dx, msg4
      mov ah, 09h
      int 21h      
spausdint:
      mov al, sk1[bx]
      or al, 30h        ; konvertuoja i ASCII formata
      inc bx
      mov ah, 0Eh       ; 'teletype output', viena simboli i ekrana, kitas simbolis isvedamas po jo
      int 10h
      loop spausdint
galas:
      mov ah, 4ch
      int 21h
klaida:
      lea dx, msg3
      mov ah, 09h
      int 21h
      jmp galas
minus:   
      cmp si, 0  
      je klaida        ; jei perejom visa pirma skaiciu tai nera is ko atimti -> num2 > num1
      stc              ; atstatom cf=1
      dec si
      mov al, sk1[si]
      sbb al, 0
      mov sk1[si], al
      xchg bx, cx
      mov dx,offset msg4
      mov ah, 09h
      int 21h   
      jmp spausdint

end main